home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Rozne / HTTrack 3.40-2 / httrack-3.40-2.exe / {app} / src_win / WinHTTrack / Wid1.cpp < prev    next >
C/C++ Source or Header  |  2005-05-08  |  26KB  |  870 lines

  1. // Wid1.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <afxole.h>
  6. #include "oledlg.h"
  7. #include "afxodlgs.h"
  8.  
  9.  
  10. #include "Shell.h"
  11. #include "Wid1.h"
  12. //#include "filter.h"
  13.  
  14. #include "NewProj.h"
  15. #include "XSHBrowseForFolder.h"
  16.  
  17. #define HTS_WIN 1
  18. extern "C" {
  19.   #include "HTTrackInterface.h"
  20.   #include "htsbase.h"
  21.   #include "htslib.h"
  22. }
  23.  
  24. #include "about.h"
  25. //#include "ProxyId.h"
  26. #include "InsertUrl.h"
  27.  
  28. #ifdef _DEBUG
  29. #define new DEBUG_NEW
  30. #undef THIS_FILE
  31. static char THIS_FILE[] = __FILE__;
  32. #endif
  33.  
  34. extern CNewProj* dialog0;
  35.  
  36. extern int binput(char* buff,char* s,int max);
  37.  
  38. extern int check_continue(char* path_log);
  39. //extern HICON httrack_icon;
  40. extern int linput(FILE* fp,char* s,int max);
  41. extern int linput_trim(FILE* fp,char* s,int max);
  42. extern int linput_cpp(FILE* fp,char* s,int max);
  43. extern char* fconcat(char* a,char* b);
  44. extern int cmdl_opt(char* s);
  45. extern void Write_profile(CString path,int load_path);
  46. extern void Read_profile(CString path,int load_path);
  47. //extern int suivant4(void);
  48. extern CShellApp* CShellApp_app;
  49.  
  50. // Helper
  51. extern LaunchHelp* HtsHelper;
  52.  
  53. // reference sur objet
  54. extern Wid1* dialog1;
  55.  
  56. /* Main WizTab frame */
  57. #include "WizTab.h"
  58. extern CWizTab* this_CWizTab;
  59.  
  60. /* Main splitter frame */
  61. #include "DialogContainer.h"
  62. #include "splitter.h"
  63. extern CSplitterFrame* this_CSplitterFrame;
  64.  
  65. /* Back to FirstInfo */
  66. //#include "FirstInfo.h"
  67.  
  68. // pour lire ini qu'une fois
  69. int first_time=1;
  70.  
  71. /////////////////////////////////////////////////////////////////////////////
  72. // Wid1 dialog
  73.  
  74.  
  75. /*class FileSelPath : public CFileDialog {
  76. public:
  77.   BOOL OnFileNameOK( ) { return 0; }
  78.   FileSelPath(BOOL a):CFileDialog(a) { };
  79. };*/
  80.  
  81. IMPLEMENT_DYNCREATE(Wid1, CPropertyPage)
  82.  
  83. //Cfilter filter;
  84. CString change(CString,char);
  85.  
  86. Wid1::Wid1()
  87.     : CPropertyPage(Wid1::IDD)
  88. {
  89.   dialog1=this;    /* NOTER REFERENCE */
  90.   cancel=0;
  91.     //{{AFX_DATA_INIT(Wid1)
  92.     m_C1 = -1;
  93.     m_urls = _T("");
  94.   m_todo = 0;
  95.     m_infomain = _T("");
  96.     m_filelist = _T("");
  97.     //}}AFX_DATA_INIT
  98. }
  99.  
  100. Wid1::~Wid1() {
  101.   dialog1=NULL;
  102. }
  103.  
  104. void Wid1::DoDataExchange(CDataExchange* pDX)
  105. {
  106.     CPropertyPage::DoDataExchange(pDX);
  107.     //{{AFX_DATA_MAP(Wid1)
  108.     DDX_Control(pDX, IDC_todo, m_ctl_todo);
  109.     DDX_Text(pDX, IDC_URL, m_urls);
  110.     DDX_CBIndex(pDX, IDC_todo, m_todo);
  111.     DDX_Text(pDX, IDC_INFOMAIN, m_infomain);
  112.     DDX_Text(pDX, IDC_filelist, m_filelist);
  113.     //}}AFX_DATA_MAP
  114. }
  115.  
  116. //IMPLEMENT_DYNAMIC(Wid1, CPropertyPage)
  117.  
  118. #define wm_CEasyDropTargetCallback (WM_USER + 1)
  119. BEGIN_MESSAGE_MAP(Wid1, CPropertyPage)
  120.     //{{AFX_MSG_MAP(Wid1)
  121.     ON_EN_CHANGE(IDC_URL, OnChangeUrl)
  122.     ON_CBN_SELCHANGE(IDC_todo, OnSelchangetodo)
  123.     ON_WM_CREATE()
  124.     ON_WM_HELPINFO()
  125.     ON_BN_CLICKED(ID_setopt, Onsetopt)
  126.     ON_BN_CLICKED(IDC_login2, Onlogin2)
  127.     ON_BN_CLICKED(IDC_br, Onbr)
  128.   ON_WM_DROPFILES()
  129.     ON_WM_DRAWITEM()
  130.     ON_WM_SHOWWINDOW()
  131.     ON_EN_CHANGE(IDC_filelist, OnChangefilelist)
  132.     //}}AFX_MSG_MAP
  133.     ON_COMMAND(ID_HELP_FINDER,OnHelpInfo2)
  134.     ON_COMMAND(ID_HELP,OnHelpInfo2)
  135.     //ON_COMMAND(ID_CONTEXT_HELP,OnContextHelp)
  136.     ON_COMMAND(ID_DEFAULT_HELP,OnHelpInfo2)
  137.   //
  138.   ON_BN_CLICKED(ID_LOAD_OPTIONS,OnLoadprofile)
  139.   ON_BN_CLICKED(ID_FILE_SAVE_OPTIONS_AS,OnSaveprofile)
  140.     ON_BN_CLICKED(ID_LoadDefaultOptions, OnLoaddefault)
  141.     ON_BN_CLICKED(ID_SaveDefaultOptions, OnSavedefault)
  142.     ON_BN_CLICKED(ID_ClearDefaultOptions,OnResetdefault)
  143.     //ON_BN_CLICKED(ID_NewProjectImport, OnNewProject)
  144.     ON_BN_CLICKED(ID_SaveProject, OnSaveProject)
  145.   ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  146.   //
  147.   ON_MESSAGE( wm_CEasyDropTargetCallback, DragDropText)
  148. END_MESSAGE_MAP()
  149.  
  150. /////////////////////////////////////////////////////////////////////////////
  151. // Wid1 message handlers
  152.  
  153. BOOL Wid1::OnInitDialog( ) {
  154.   CPropertyPage::OnInitDialog();
  155.   EnableToolTips(true);     // TOOL TIPS
  156.  
  157.   // inits aprΦs affichage
  158.   url_status=-1;
  159.   filelist_status=-1;
  160.   //prox_status=-1;
  161.   log_flip=-1;
  162.   mir_status=-1;
  163.   proj_status=-1;
  164.   continue_status=-1;
  165.   OnChangeUrl();
  166.   OnChangefilelist();
  167.   //OnChangeprox();  // update disabled/normal
  168.   //OnSelchangedepth();  // update disabled/normal
  169.   OnSelchangetodo();
  170.  
  171.   // Patcher l'interface pour les Franτais ;-)
  172.   if (LANG_T(-1)) {    // Patcher en franτais
  173.     //SetDlgItemTextCP(this, ,"");
  174.     SetWindowTextCP(this,  LANG(LANG_G30)); // "Bienvenue dans WinHTTrack!");
  175.     SetDlgItemTextCP(this, IDC_STATIC_action,LANG(LANG_G31)); // "Action:");
  176.     //SetDlgItemTextCP(this, IDC_STATIC_filters,LANG(LANG_G33)); // "Filtres (refuser/accepter liens) :");
  177.     SetDlgItemTextCP(this, IDC_STATIC_filters2,LANG(LANG_G41)); // "Options & prefs :");
  178.     SetDlgItemTextCP(this, IDC_STATIC_paths,LANG(LANG_G34)); // "Chemins");
  179.     //SetDlgItemTextCP(this, IDC_regdef,LANG(LANG_G37)); // "Sauver prΘfs");
  180.     //SetDlgItemTextCP(this, IDOK,LANG(LANG_NEXT )); // "SUIVANT ->");
  181.     //SetDlgItemTextCP(this, IDC_avant,LANG(LANG_BACK));
  182.     //SetDlgItemTextCP(this, IDCANCEL,LANG(LANG_QUIT));  // exit 
  183.     //SetDlgItemTextCP(this, IDfilter,LANG(LANG_G39)); // "DΘfinir..");
  184.     SetDlgItemTextCP(this, ID_setopt,LANG(LANG_G40)); // "DΘfinir les options..");
  185.     //SetDlgItemTextCP(this, IDC_mirtitle2,LANG(LANG_G42)); // "Nom du projet");
  186.     SetDlgItemTextCP(this, IDC_login2,LANG_G43);
  187.     //SetDlgItemTextCP(this, IDC_urls,LANG_G44);
  188.     SetDlgItemTextCP(this, IDC_STATIC_webaddr,LANG_G44);
  189.     SetCombo(this,IDC_todo,LISTDEF_10);
  190.   }
  191.  
  192.   // inits
  193.   LAST_ACTION = m_ctl_todo.GetCount()-1;  // dernier item (update)
  194.  
  195.   // fichier ini
  196.   // lire default
  197.   if (first_time) {
  198.     first_time=0;
  199.  
  200.     //SetDlgItemTextCP(this, IDC_INFOMAIN,"Please select an action, and fill the addresse(s) in the URL box.\x0d\x0aThe mirror will be saved in the location indicated below");
  201.  
  202.     /*
  203.     CString strSection       = "DefaultValues";    
  204.     CWinApp* pApp = AfxGetApp();
  205.     CString st;
  206.     int n;
  207.     */
  208.  
  209.     /*
  210.     if ((n = pApp->GetProfileInt(strSection, "Action",CB_ERR)) != CB_ERR)
  211.       m_ctl_todo.SetCurSel(n);
  212.  
  213.     if ((st = pApp->GetProfileString(strSection, "Depth")))
  214.       SetDlgItemTextCP(this, IDC_depth,st);    
  215.     */
  216.  
  217.     /*
  218.     if ((st = pApp->GetProfileString(strSection, "MirrorPath","default")) != (CString) "default")
  219.       SetDlgItemTextCP(this, IDC_pthmir,st);
  220.     if ((st = pApp->GetProfileString(strSection, "LogPath","default")) != (CString) "default")
  221.       SetDlgItemTextCP(this, IDC_pathlog,st);
  222.     */
  223.  
  224.     // Infos la 1ere fois!
  225.     /*if (!pApp->GetProfileInt("Interface","FirstRun",0)) {
  226.       pApp->WriteProfileInt("Interface","FirstRun",1);
  227.       Onipabout();
  228.     }*/
  229.  
  230.   } else {
  231.     log_flip=0;
  232.   }
  233.   // fichier ini  
  234.  
  235.   //OnChangepathlog();  // update rΘpertoire log
  236.   //OnChangepthmir();  // update rΘpertoire miroir
  237.  
  238.   return TRUE;
  239. }
  240.  
  241. void Wid1::AfterInitDialog( ) {
  242.   WHTT_LOCATION("Wid1");
  243.   if (load_after_changes) {
  244.     AfterChangepathlog();
  245.     OnSelchangetodo();
  246.     load_after_changes=0;
  247.   }
  248.   OnChangeUrl();
  249.   OnChangefilelist();
  250. }
  251.  
  252. /*
  253. void Wid1::Onurls() {
  254.   CleanUrls();
  255. }
  256. */
  257.  
  258. // nettoyer les URLs
  259. void Wid1::CleanUrls() 
  260. {
  261.   CWaitCursor wait;
  262.   char* tempo, *ch,*str;
  263.   CString    st="";
  264.   // TODO: Add your control notification handler code here
  265.   
  266.   GetDlgItemText(IDC_URL,st);
  267.   tempo=(char*) malloc(st.GetLength()+1);
  268.   ch=(char*) malloc(st.GetLength()+1);
  269.   str=(char*) malloc(st.GetLength()*2+8192);
  270.   tempo[0]=ch[0]=str[0]='\0';
  271.   if ( (tempo) && (ch) && (str) ) {
  272.     strcpybuff(tempo,st);
  273.     int i;
  274.     for(i=0;i < (int) strlen(tempo);i++)  {
  275.       if(tempo[i]==10) tempo[i]=' ';
  276.       else if(tempo[i]==13) tempo[i]=' ';
  277.     }
  278.     
  279.     strcpybuff(ch,"");
  280.     int j=0;
  281.     for(i=0;i <= (int) strlen(tempo);i++) {
  282.       if ((tempo[i]==' ') || (tempo[i]==0)) {
  283.         ch[j++]='\0';
  284.         if ((strlen(ch)>0) && ((int) strlen(ch)<HTS_URLMAXSIZE) ) {
  285.           // vΘrifier URL
  286.           /*
  287.           char adr[HTS_URLMAXSIZE*2],fil[HTS_URLMAXSIZE*2];
  288.           adr[0]=fil[0]='\0';
  289.           if (ident_url_absolute(ch,adr,fil)==-1) {
  290.             htsblk r;
  291.             char loc[HTS_URLMAXSIZE*2]; loc[0]='\0';    // Θventuelle nouvelle position
  292.             r=http_test(ch,fil,loc);
  293.             if (HTTP_IS_REDIRECT(r.statuscode)) {
  294.               strcpybuff(ch,loc);
  295.             }
  296.           }
  297.           */
  298.           // recopier adresse
  299.           if (strstr(ch,":/")==NULL) {
  300.             strcatbuff(str,"http://");
  301.           }
  302.           strcatbuff(str,ch);
  303.           strcatbuff(str,"\x0d\x0a");
  304.         }
  305.         j=0;
  306.       } else ch[j++]=tempo[i];
  307.     }
  308.     SetDlgItemTextCP(this, IDC_URL,str);
  309.     free(tempo);
  310.     free(ch);
  311.     free(str);
  312.   } else
  313.     AfxMessageBox(LANG(LANG_DIAL10));
  314.   //m_urls=str;
  315. }
  316.  
  317. void Wid1::OnChangeUrl()
  318. {
  319.   CString st="";
  320.   //char tempo[8192];
  321.   char* tempo;
  322.     // TODO: If this is a RICHEDIT control, the control will not
  323.     // send this notification unless you override the CPropertyPage::OnInitDialog()
  324.     // function to send the EM_SETEVENTMASK message to the control
  325.   // with the ENM_CHANGE flag ORed into the lParam mask.
  326.   
  327.   // TODO: Add your control notification handler code here
  328.   GetDlgItemText(IDC_URL,st);
  329.   tempo=(char*) malloc(st.GetLength()+1);
  330.   if (tempo) {
  331.     strcpybuff(tempo,st);
  332.     int ex=0;
  333.     do {
  334.       if (strlen(tempo)>0) {
  335.         switch (tempo[strlen(tempo)-1]) {
  336.         case 10: case 13: case 32: tempo[strlen(tempo)-1]='\0';
  337.           break;
  338.         default: ex=1;
  339.           break;
  340.         }
  341.       } else ex=1;
  342.     } while(!ex);
  343.     
  344.     if ( ((strlen(tempo)>0) ) != url_status) { // || (m_ctl_todo.GetCurSel()==4)
  345.       url_status=!url_status;
  346.       
  347.       if (url_status) {
  348.         //m_ctl_next.ModifyStyle(WS_DISABLED,0);
  349.       }
  350.       else {
  351.         //m_ctl_next.ModifyStyle(0,WS_DISABLED);
  352.       }
  353.       //m_ctl_next.RedrawWindow();
  354.     }
  355.     free(tempo); tempo=NULL;
  356.   } else
  357.     AfxMessageBox(LANG(LANG_DIAL10));
  358. }
  359.  
  360. void Wid1::Refresh() {
  361.   OnChangeUrl();
  362.   //OnChangeprox();  // update disabled/normal
  363.   //OnSelchangedepth();  // update disabled/normal
  364. }
  365.  
  366. void Wid1::OnSelchangetodo() 
  367. {
  368.   int r;
  369.   r = m_ctl_todo.GetCurSel();
  370.   if (r!=CB_ERR) {
  371.     switch(r) {
  372.     case 0:
  373.       SetDlgItemTextCP(this, IDC_INFOMAIN,
  374.       LANG(LANG_G2 /*"Mirror mode, fill the addresse(s) in the URL box.\x0d\x0aThe mirror will be saved in the location indicated below",
  375.       "Mode miroir, remplissez les addresse(s) dans la liste d'URLs.\x0d\x0aLe mirroir sera sauvΘ α l'emplacement indiquΘ plus bas"*/)
  376.       );
  377.       break;
  378.     case 1:
  379.       SetDlgItemTextCP(this, IDC_INFOMAIN,
  380.       LANG(LANG_G3 /* "Mirror mode with wizard (asks questions), fill the addresse(s) in the URL box.\x0d\x0aThe mirror will be saved in the location indicated below",
  381.       "Mode miroir semi automatique (pose des questions), remplissez les addresse(s) dans la liste d'URLs.\x0d\x0aLe mirroir sera sauvΘ α l'emplacement indiquΘ plus bas"*/)
  382.       );
  383.       break;
  384.     case 2:
  385.       SetDlgItemTextCP(this, IDC_INFOMAIN,
  386.       LANG(LANG_G4 /* "Get files mode, fill the addresse(s) of the files in the URL box.\x0d\x0aThe mirror will be saved in the location indicated below",
  387.       "Mode tΘlΘchargement de fichier, remplissez les addresse(s) des fichiers dans la liste d'URLs.\x0d\x0aLe mirroir sera sauvΘ α l'emplacement indiquΘ plus bas"*/)
  388.       );
  389.       SetDlgItemTextCP(this, IDC_depth,"");
  390.       break;
  391.     case 3:
  392.       SetDlgItemTextCP(this, IDC_INFOMAIN,
  393.         LANG(LANG_G1B)
  394.         );
  395.       SetDlgItemTextCP(this, IDC_depth,"");
  396.       break;
  397.     case 4:
  398.       SetDlgItemTextCP(this, IDC_INFOMAIN,
  399.       LANG(LANG_G5 /* "Test links mode, fill the addresse(s) of the pages containing links to test in the URL box.\x0d\x0aThe log report will be saved in the location indicated below",
  400.       "Mode test de liens, remplissez les adresse(s) des pages contenant les liens α tester dans la liste d'URLs.\x0d\x0aLes fichiers d'audit seront sauvΘs α l'emplacement indiquΘ plus bas"*/)
  401.       );
  402.       SetDlgItemTextCP(this, IDC_depth,"");
  403.       break;
  404.     default:
  405.       if (r == LAST_ACTION )
  406.         SetDlgItemTextCP(this, IDC_INFOMAIN,
  407.         LANG(LANG_G6 /* "Update/Continue a mirror mode, check addresse(s) in the URL box, then click to the 'NEXT' button and check parameters.\x0d\x0aThe mirror will be saved in the location indicated below",
  408.         "Mode mise α jour/continuer un miroir, vΘrifiez les adresse(s) dans la liste d'URLs, puis cliquez sur le bouton 'NEXT' et vΘrifiez les paramΦtres.\x0d\x0aLe mirroir sera sauvΘ α l'emplacement indiquΘ plus bas"*/)
  409.         );
  410.       else if (r == LAST_ACTION-1 )
  411.         SetDlgItemTextCP(this, IDC_INFOMAIN,
  412.         LANG(LANG_G6b /* "Update/Continue a mirror mode, check addresse(s) in the URL box, then click to the 'NEXT' button and check parameters.\x0d\x0aThe mirror will be saved in the location indicated below",
  413.         "Mode mise α jour/continuer un miroir, vΘrifiez les adresse(s) dans la liste d'URLs, puis cliquez sur le bouton 'NEXT' et vΘrifiez les paramΦtres.\x0d\x0aLe mirroir sera sauvΘ α l'emplacement indiquΘ plus bas"*/)
  414.         );
  415.       break;
  416.     }
  417.     
  418.     if ( ((r==LAST_ACTION)||(r==LAST_ACTION-1)) != continue_status) {
  419.       continue_status=((r==LAST_ACTION)||(r==LAST_ACTION-1));
  420.       OnChangeUrl();
  421.     }
  422.   }
  423.   
  424. }
  425.  
  426.  
  427. void Wid1::OnChangepathlog() {
  428.   load_after_changes=1;
  429. }
  430.  
  431. void Wid1::AfterChangepathlog() 
  432. {
  433.   CString st="";
  434.   char tempo[8192];
  435.   BOOL modify;
  436.  
  437.   strcpybuff(tempo,dialog0->GetPath());
  438.   {
  439.     if (fexist(fconcat(tempo,"hts-cache/winprofile.ini"))) {    // un cache est prΘsent
  440.       if (fsize(fconcat(tempo,"hts-cache/winprofile.ini"))>0) {   // taille log contr⌠le>0
  441.         int i;
  442.         for(i=0;i<(int) strlen(tempo);i++)
  443.           if (tempo[i]=='/')
  444.             tempo[i]='\\';
  445.           Read_profile(fconcat(tempo,"hts-cache\\winprofile.ini"),0);
  446.  
  447.           // peut on modifier?
  448.           int pos=m_ctl_todo.GetCurSel();
  449.           if ((pos==LAST_ACTION) || (pos==LAST_ACTION-1) || (pos==0))
  450.             modify=true;
  451.           else
  452.             modify=false;
  453.           
  454.           // existe: update
  455.           if (
  456.             fexist(fconcat(tempo,"hts-cache/new.zip"))
  457.             ||
  458.             (fexist(fconcat(tempo,"hts-cache/new.dat"))) && (fexist(fconcat(tempo,"hts-cache/new.ndx")))
  459.             ) {  // il existe dΘja un cache prΘcΘdent.. renommer
  460.             if (modify) {
  461.               if (
  462.                 (!fexist(fconcat(tempo,"hts-in_progress.lock")))
  463.                 &&
  464.                 (!fexist(fconcat(tempo,"hts-cache/interrupted.lock")))
  465.                 )
  466.                 m_ctl_todo.SetCurSel(LAST_ACTION);
  467.               else
  468.                 m_ctl_todo.SetCurSel(LAST_ACTION-1);
  469.             }
  470.             log_flip=1;
  471.           } else if (log_flip) {
  472.             if (modify)
  473.               m_ctl_todo.SetCurSel(0);
  474.             log_flip = 0;
  475.           }
  476.           OnSelchangetodo();
  477.       }
  478.     } else if (log_flip) {
  479.       m_ctl_todo.SetCurSel(0);
  480.       log_flip = 0;
  481.     }
  482.   }
  483. }
  484. /*
  485. void Wid1::OnClose() 
  486. {
  487.   // TODO: Add your message handler code here and/or call default
  488.   //Onfin();
  489.   //::OnClose();
  490.   if (AfxMessageBox(
  491.   LANG(LANG_J1)
  492.   ,MB_OKCANCEL)==IDOK) {
  493.     if (Save_current_profile(1)!=IDCANCEL) {
  494.       cancel=1;
  495.       CPropertyPage::OnCancel();
  496.     }
  497.   }
  498. }
  499. */
  500.  
  501.  
  502.  
  503. // ------------------------------------------------------------
  504. // TOOL TIPS
  505. //
  506. // ajouter dans le .cpp:
  507. // remplacer les deux Wid1:: par le nom de la classe::
  508. // dans la message map, ajouter
  509. // ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  510. // dans initdialog ajouter
  511. // EnableToolTips(true);     // TOOL TIPS
  512. //
  513. // ajouter dans le .h:
  514. // char* GetTip(int id);
  515. // et en generated message map
  516. // afx_msg BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
  517. BOOL Wid1::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
  518. {
  519.   TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
  520.   UINT nID =pNMHDR->idFrom;
  521.   if (pTTT->uFlags & TTF_IDISHWND)
  522.   {
  523.     // idFrom is actually the HWND of the tool
  524.     nID = ::GetDlgCtrlID((HWND)nID);
  525.     if(nID)
  526.     {
  527.       char* st=GetTip(nID);
  528.       if (st != "") {
  529.         pTTT->lpszText = st;
  530.         pTTT->hinst = AfxGetResourceHandle();
  531.         return(TRUE);
  532.       }
  533.     }
  534.   }
  535.   return(FALSE);
  536. }
  537. char* Wid1::GetTip(int ID)
  538. {
  539.   switch(ID) {
  540.     case IDC_todo:  return LANG(LANG_G9); break; // "Choose an action","Choisissez une action"); break; 
  541.     case IDC_depth: return LANG(LANG_G10); break; // "Maximum link depth to scan","Profondeur maximale"); break;
  542.     case IDC_URL:   return LANG(LANG_G11); break; // "Enter addresses here","Entrez les adresses ici"); break;
  543.     //case IDC_urls:  return LANG(LANG_G12); break; // "Check spelling","VΘrifier syntaxe"); break;
  544.     //case IDfilter:  return LANG(LANG_G13); break; // "Define additional filters","DΘfinir les filtres supplΘmentaires"); break;
  545.     //case IDC_pathlog:  return LANG(LANG_G16); break; // "Path","Chemin"); break;
  546.     //case IDC_br2:      return LANG(LANG_G17); break; // "Select path","Choix du chemin"); break;
  547.     //case IDC_pthmir:   return LANG(LANG_G18); break; // "Path","Chemin"); break;
  548.     //case IDC_br1:      return LANG(LANG_G19); break; // "Select path","Choix du chemin"); break;
  549.     case IDCANCEL:     return LANG(LANG_G20); break; // "Quit WinHTTrack","Quittter WinHTTrack"); break;
  550.     case IDC_ipabout:  return LANG(LANG_G21); break; // "About WinHTTrack","A propos de WinHTTrack"); break;
  551.     case IDC_regdef:   return LANG(LANG_G22); break; // "Save preferences as default values","Sauver les rΘglages par dΘfaut"); break;
  552.     case IDOK:         return LANG(LANG_G23); break; // "Click to continue","Clic pour continuer"); break;
  553.     case IDC_avant:     return LANG_TIPPREV; break;
  554.     case ID_setopt:    return LANG(LANG_G24); break; // "Click to define option","Clic pour dΘfinir les options"); break;
  555.     case IDC_login2:   return LANG_G24b; break;
  556.     case IDC_filelist: return LANG_G24c; break;
  557.     //case : return ""; break;
  558.   }
  559.   return "";
  560. }
  561. // TOOL TIPS
  562. // ------------------------------------------------------------
  563.  
  564.  
  565. /*
  566. void Wid1::OnDropFiles(HDROP hDropInfo) 
  567. {
  568.   int nf;
  569.   int i;
  570.   nf=DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0);    // nbre de fichiers
  571.  
  572.   for(i=0;i<nf;i++) {
  573.     char* buff;
  574.     int size;
  575.     size=DragQueryFile(hDropInfo,i,NULL,0);    // taille buffer nΘcessaire
  576.     if (size>0) {
  577.       size+=16;    // marge de sΘcuritΘ
  578.       buff=(char*) calloc(size,1);
  579.       if (buff) {
  580.         if (DragQueryFile(hDropInfo,i,buff,size)>0) {    // ok copiΘ
  581.           AfxMessageBox(buff,MB_OKCANCEL+MB_ICONQUESTION);
  582.         }
  583.         free(buff);
  584.       }
  585.     }
  586.   }
  587.  
  588.   CPropertyPage::OnDropFiles(hDropInfo);
  589. }
  590. */
  591.  
  592. int Wid1::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  593. {
  594.     if (CPropertyPage::OnCreate(lpCreateStruct) == -1)
  595.         return -1;
  596.  
  597.   // Drag&Drop
  598.   drag=new CEasyDropTarget(this);
  599.   if (drag->IsRegistered()) {
  600.     drag->SetTextCallback(wm_CEasyDropTargetCallback);
  601.   }
  602.     
  603.     return 0;
  604. }
  605.  
  606.  
  607. CString Wid1::TextToUrl(CString st,CLIPFORMAT cfFormat) {
  608.   // yop
  609.   // on va convertir les chaines α la suite
  610.   CString res;
  611.   if (cfFormat==CF_TEXT) {
  612.     char *buff, *last;
  613.     for(buff = st.GetBuffer(0), last = buff ; *buff != '\0' ; buff++) {
  614.       if (*buff == 10 || *buff == 13) {
  615.         *buff = 0;
  616.         if (*last) {
  617.           res += last;
  618.           res += "\r\n";
  619.         }
  620.         last = buff + 1;
  621.       }
  622.     }
  623.     return res;
  624.   }
  625.   else if (cfFormat==CF_HDROP) {
  626.     char* last = st.GetBuffer(0);
  627.     int len = (int) strlen(last);
  628.     if (stricmp(last + len - 4, ".url") == 0) {
  629.       FILE* fp = fopen(last, "rb");
  630.       if (fp != NULL) {
  631.         char line[256];
  632.         if (linput(fp, line, sizeof(line) - 2) > 0
  633.           && linput(fp, line, sizeof(line) - 2) > 0)
  634.         {
  635.           /* BASEURL=http://.. */
  636.           char* pos = strchr(line, '=');
  637.           if (pos != NULL) {
  638.             res += (pos + 1);
  639.             res += "\r\n";
  640.           }
  641.         }
  642.         fclose(fp);
  643.       } else {
  644.         res += last;
  645.         res += "\r\n";
  646.       }
  647.     } 
  648.     else if (st.GetLength()<256) {
  649.       char s[256];
  650.       strcpybuff(s,st);
  651.       escape_check_url(s);     // coder %
  652.       res = "file://";
  653.       res += s;
  654.     }
  655.   }
  656.   return res;
  657. }
  658.  
  659. // Message from CEasyDropTarget
  660. LRESULT Wid1::DragDropText(WPARAM wParam,LPARAM lParam) {
  661.   if (lParam) {
  662.     CString st=*((CString*) lParam);
  663.     CLIPFORMAT cfFormat=wParam;
  664.     st=Wid1::TextToUrl(st,cfFormat);
  665.     if (st=="")
  666.       AfxMessageBox(LANG(LANG_DIAL11),MB_SYSTEMMODAL);
  667.     else
  668.       AddText(st);
  669.   }
  670.   return 0;
  671. }
  672.  
  673. // ajout d'URLs
  674. void Wid1::AddText(CString add_st) {
  675.   CString st;
  676.   GetDlgItemText(IDC_URL,st);
  677.   SetDlgItemTextCP(this, IDC_URL,st+"\r\n"+add_st);
  678.   CleanUrls();
  679.   OnChangeUrl();
  680. }
  681.  
  682. // Appel aide
  683. void Wid1::OnHelpInfo2() {
  684.   (void) OnHelpInfo(NULL);
  685. }
  686.  
  687. BOOL Wid1::OnHelpInfo(HELPINFO* dummy) 
  688. {
  689.   //return CPropertyPage::OnHelpInfo(pHelpInfo);
  690.   //AfxGetApp()->WinHelp(0,HELP_FINDER);    // Index du fichier Hlp
  691.   //LaunchHelp(pHelpInfo);
  692.   HtsHelper->Help("step2.html");
  693.   //HtsHelper->Help();
  694.   return true;
  695. }
  696.  
  697. void Wid1::OnLoadprofile() {
  698.   static char BASED_CODE szFilter[256];
  699.   strcpybuff(szFilter,LANG(LANG_G25 /*"WinHTTrack preferences (*.opt)|*.opt||","RΘglages de WinHTTrack (*.opt)|*.opt||"*/));
  700.   CFileDialog* dial = new CFileDialog(true,"opt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
  701.   if (dial->DoModal() == IDOK) {
  702.     CString st=dial->GetPathName();
  703.     char s[256];
  704.     strcpybuff(s,st);
  705.     if (fexist(s))
  706.       Read_profile(st,1);
  707.     else
  708.       AfxMessageBox(LANG(LANG_G26 /*"File not found!","Fichier introuvable!"*/));
  709.   }
  710.   delete dial;
  711. }
  712.  
  713. void Wid1::OnSaveprofile() {
  714.   static char BASED_CODE szFilter[256];
  715.   strcpybuff(szFilter,LANG(LANG_G25 /*"WinHTTrack preferences (*.opt)|*.opt||","RΘglages de WinHTTrack (*.opt)|*.opt||"*/));
  716.   CFileDialog* dial = new CFileDialog(false,"opt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
  717.   if (dial->DoModal() == IDOK) {
  718.     CString st=dial->GetPathName();
  719.     Write_profile(st,1);
  720.   }
  721.   delete dial;
  722. }
  723.  
  724. void Wid1::OnLoaddefault() {
  725.   if (AfxMessageBox(LANG(LANG_G27),MB_OKCANCEL)==IDOK) {
  726.     Read_profile("",0);
  727.   }
  728. }
  729.  
  730. void Wid1::OnSavedefault() {
  731.   if (AfxMessageBox(LANG(LANG_G28),MB_OKCANCEL)==IDOK) {
  732.     Write_profile("",0);
  733.   }
  734. }
  735.  
  736. void Wid1::OnResetdefault() {
  737.   if (AfxMessageBox(LANG(LANG_G29),MB_OKCANCEL)==IDOK) {
  738.     Read_profile("<null>",0);    // charger default
  739.     Write_profile("",0);         // et sauver
  740.   }
  741. }
  742.  
  743. /*
  744. void Wid1::OnNewProject() {
  745.   if (AfxMessageBox(LANG(LANG_G1C),MB_OKCANCEL)==IDOK) {
  746.     CWinApp* pApp = AfxGetApp();
  747.     CString name = pApp->m_pszHelpFilePath;
  748.     name=name.Left(name.GetLength()-4);
  749.     name += ".EXE";
  750.     ShellExecute(NULL,"open",name,"","",SW_RESTORE);
  751.     cancel=1;
  752.     EndDialog(1);
  753.   }
  754. }
  755. */
  756.  
  757. void Wid1::OnSaveProject() {
  758.   Save_current_profile(0);
  759. }
  760.  
  761. void Wid1::Onsetopt() 
  762. {
  763.   CShellApp_app->OptPannel();
  764. }
  765.  
  766. /*
  767. HCURSOR Wid1::OnQueryDragIcon() 
  768. {
  769.     // TODO: Add your message handler code here and/or call default
  770.     
  771.     return CPropertyPage::OnQueryDragIcon();
  772. }
  773. */
  774.  
  775. void Wid1::Onlogin2() 
  776. {
  777.   CInsertUrl url;
  778.   url.dest_path=dialog0->GetPath();
  779.   if (url.DoModal() == IDOK) {
  780.     if (url.m_urladr.Left(7)=="http://")
  781.       url.m_urladr=url.m_urladr.Mid(7);
  782.     CString st;
  783.     GetDlgItemText(IDC_URL,st);
  784.     if (url.m_urllogin.GetLength()==0) {
  785.       SetDlgItemTextCP(this, IDC_URL,st+"\r\n"+url.m_urladr);
  786.     } else {
  787.       char *a,*b;
  788.       escape_in_url(a=copychar(LPCTSTR(url.m_urllogin)));
  789.       escape_in_url(b=copychar(LPCTSTR(url.m_urlpass)));
  790.       SetDlgItemTextCP(this, IDC_URL,st+"\r\n"+(CString)(a)+":"+(CString)(b)+"@"+url.m_urladr);
  791.     }
  792.     CleanUrls();
  793.     OnChangeUrl();
  794.   }
  795. }
  796.  
  797. LRESULT Wid1::OnWizardNext() {
  798.   CString st;
  799.   UpdateData(TRUE);         // DoDataExchange
  800.   m_urls.TrimLeft(); m_urls.TrimRight();
  801.   m_filelist.TrimLeft(); m_filelist.TrimRight();
  802.   if ((m_urls.GetLength()>0) || (m_filelist.GetLength()>0)) {
  803.     if ((m_todo==LAST_ACTION)||(m_todo==LAST_ACTION-1)) {
  804.       char path[HTS_URLMAXSIZE*2];
  805.       CString st;
  806.       st=dialog0->GetPath();
  807.       strcpybuff(path,st);
  808.       if (check_continue(path))
  809.         return 0;
  810.       else {
  811.         GetDlgItem(IDC_URL)->SetFocus();
  812.         return -1;        // impossible de continuer
  813.       }
  814.     }
  815.   } else {
  816.     GetDlgItem(IDC_URL)->SetFocus();
  817.     return -1;
  818.   }
  819.   return 0;
  820. }
  821.  
  822. BOOL Wid1::OnSetActive( ) {
  823.   //OnInitDialog();
  824.   AfterInitDialog();
  825.   this_CWizTab->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT);
  826.   return 1;
  827. }
  828.  
  829. BOOL Wid1::OnQueryCancel( ) {
  830.   this_CSplitterFrame->SetNewView(0,1,RUNTIME_CLASS(CDialogContainer));
  831.   return 0;
  832. }
  833.  
  834. BOOL Wid1::OnKillActive( ) {
  835.   UpdateData(TRUE);         // DoDataExchange
  836.   return 1;
  837. }
  838.  
  839. void Wid1::Onbr() 
  840. {
  841.   static char BASED_CODE szFilter[256];
  842.   strcpybuff(szFilter,LANG(LANG_G25b));
  843.   CFileDialog* dial = new CFileDialog(true,"txt",NULL,OFN_HIDEREADONLY,szFilter);
  844.   if (dial->DoModal() == IDOK) {
  845.     if (fexist((char*)LPCSTR(dial->GetPathName()))) {
  846.       SetDlgItemTextCP(this, IDC_filelist,dial->GetPathName());
  847.     } else {
  848.       AfxMessageBox(LANG(LANG_G26 /*"File not found!","Fichier introuvable!"*/));
  849.       SetDlgItemTextCP(this, IDC_filelist,"");
  850.     }
  851.   }
  852.   delete dial;
  853.   OnChangefilelist();
  854. }
  855.  
  856. void Wid1::OnChangefilelist() 
  857. {
  858.   CString st;
  859.   GetDlgItemText(IDC_filelist,st);
  860.   if ((st.GetLength()>0) != filelist_status) {
  861.     filelist_status=(st.GetLength()>0);
  862.     if (filelist_status) {
  863.       GetDlgItem(IDC_STATIC_filelist)->ModifyStyle(WS_DISABLED,0);
  864.     } else {
  865.       GetDlgItem(IDC_STATIC_filelist)->ModifyStyle(0,WS_DISABLED);
  866.     }
  867.     GetDlgItem(IDC_STATIC_filelist)->RedrawWindow();
  868.   }
  869. }
  870.